package com.agile.leetcode.middle.checkPowersOfThree;

/**
 * 判断一个数字是否可以表示成三的幂的和
 *
 * @Author:ChenZhangKun
 * @Date: 2021/4/13 9:49
 */
public class CheckPowersOfThree {
    public static void main(String[] args) {
        CheckPowersOfThree three = new CheckPowersOfThree();
        System.out.println(three.checkPowersOfThree(91));
        System.out.println(three.checkPowersOfFour(83));
    }

    /**
     * 转换为三进制数计算每一位， 如果出现某一位为2则不满足题意。
     * 例如 12 的三进制数为
     * 12 -> 110 (0 * 3^0 + 1 * 3^1 + 1 * 3^2)(0∗3
     * ) true
     * 91 -> 10101 (1 * 3^0 + 0 * 3^1 + 1 * 3^2 + 0 * 3^3 + 1 * 3^4)(1∗3
     * ) true
     * 21 -> 210 (0 * 3^0 + 1 * 3^1 + 2 * 3^2)(0∗3
     * @param n
     * @return
     */
    public boolean checkPowersOfThree(int n) {
        // 转为三进制数，如果出现了2,则不会组成
        while (n > 0) {
            int mod = n % 3;
            if (mod == 2) {
                return false;
            }
            n = n / 3;
        }
        return true;
    }
    public boolean checkPowersOfFour(int n){
        // 是否是4的幂次方
        while (n>0){
            int mod=n%4;
            if (mod==2||mod==3){
                return false;
            }
            n=n/4;
        }
        return true;
    }
}
